Benchmark  

您所在的位置:网站首页 androbench 下载 Benchmark  

Benchmark  

#Benchmark  | 来源: 网络整理| 查看: 265

Benchmark 用户指南  代码示例  Codelab API 参考文档 androidx.benchmark androidx.benchmark.junit4 androidx.benchmark.macro androidx.benchmark.macro.junit4 在 Android Studio 中准确衡量代码性能。 最近更新时间 稳定版 候选版 Beta 版 Alpha 版 2023 年 2 月 22 日 1.1.1 - - 1.2.0-alpha10 声明依赖项

如需添加 Benchmark 的依赖项,您必须将 Google Maven 制品库添加到项目中。有关详情,请阅读 Google 的 Maven 制品库。

在应用或模块的 build.gradle 文件中添加所需工件的依赖项:

Macrobenchmark

如需在项目中使用 Macrobenchmark,请将以下依赖项添加到应用或模块的 build.gradle 文件中:

Groovy dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.1.1" } Kotlin dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.1.1") } Microbenchmark Groovy dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.1.1" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } } Kotlin dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.1.1") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }

The Microbenchmark library also provides a Gradle plugin to use with your microbenchmark module. This plugin sets build configuration defaults for the module, sets up benchmark output copy to the host, and provides the ./gradlew lockClocks task.

To use the plugin, include the following line in the `plugins` block in your top-level build.gradle file:

Groovy plugins { id 'androidx.benchmark' version '1.1.1' apply false } Kotlin plugins { id("androidx.benchmark") version "1.1.1" apply false }

Then apply the plugin to your benchmark module's build.gradle file

Groovy plugins { id 'androidx.benchmark' } Kotlin plugins { id("androidx.benchmark") } 反馈

您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。

创建新问题

如需了解详情,请参阅问题跟踪器文档。

版本 1.2 版本 1.2.0-alpha10

2023 年 2 月 22 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha10。版本 1.2.0-alpha10 中包含这些提交内容。

新功能

在 Android 14 及更高版本中,得益于新的平台功能,Macrobenchmark 不再重新安装目标应用来重置编译状态。以前,在每次运行基准测试之前,都必须有一个已取得 root 权限的设备,或者处理被删除的所有应用状态(例如用户登录)。(I9b08c、b/249143766)

bug 修复

修复了 DryRunMode,使其不再因编译跳过而崩溃并出现空配置文件,而是会运行一次迭代并提取该配置文件,确保捕获到某些内容。(I2f05d、b/266403227) 修复了在旧 API 级别上检查是否存在 Powerstats 时出现的 PowerMetric 崩溃问题。(5faaf9、b/268253898) 版本 1.2.0-alpha09

2023 年 1 月 11 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha09。版本 1.2.0-alpha09 中包含这些提交内容。

bug 修复

允许将 None 传递给 androidx.benchmark.enabledRules 插桩,以停止生成所有基准/基准配置文件。(I3d7fd、b/258671856) 修复了应用模块(即,非自插桩测试 APK)中的 PerfettoTrace 捕获问题 (I12cfc) 修复了 Studio 输出中的基准配置文件 adb 拉取参数的顺序(I958d1、b/261781624) 现在,当您尝试运行 Macrobenchmark 时,Arm 模拟器 API 33 能被正确识别,并可正确输出警告。(69133b、b/262209591) 在 Macrobenchmark 测试中跳过无电池设备的电池电量检查(fe4114、b/232448937) 版本 1.2.0-alpha08

2022 年 12 月 7 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha08。版本 1.2.0-alpha08 中包含这些提交内容。

API 变更

在测试中添加了新的实验性 API PerfettoTrace.record {} 和 PerfettoTraceRule,用于捕获 Perfetto 轨迹(也称为系统轨迹),以检查测试行为和性能。(I3ba16) BaselineProfileRule 现在接受过滤器谓词,而不是软件包前缀列表。这样一来,测试将完全控制过滤。(I93240) 添加了一个实验性 API BaselineProfileRule.collectStableBaselineProfile,该 API 会等待基准配置文件可稳定地用于 N 次迭代。(I923f3) 添加了使用 BaselineProfileRule 生成基准配置文件时指定输出文件名前缀的功能。(I7b59f、b/260318655)

bug 修复

提高了文件输出写入的安全性,这应该可以防止输出文件无法被静默地写入/附加,尤其是在 API 21/22 上。(If8c44、b/227510293) 修复了 simpleperf 跟踪输出以正确创建并放置文件。这应该还可以更全面地解决 Gradle 无法成功拉取文件的问题。(I12a1c、b/259424099) 改进了 profileinstaller 版本过旧时输出的 profileinstaller 错误消息。现在,此 API 会提醒您更新 profileinstaller 版本 (1.2.1) 以衡量 API 31 到 33 上的基准配置文件,而不是指明它不受支持。(Ia517f、b/253519888) 修复了错误消息“Print 需要使用 API /proc/sys/vm/drop_caches 消息时出现的崩溃问题(I6c245、b/259508183)

已知问题 - 由于 profileinstaller 清单中缺少广播注册表(尚未发布),MacrobenchmarkScope.dropShaderCache() 可能会崩溃。(I5c728、b/258619948)如需解决 profileinstaller:1.3.0-alpha02 中的问题,请将以下内容添加到您的应用的(而非基准的)AndroidManifest.xml 中:

版本 1.2.0-alpha07

2022 年 11 月 9 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha07。版本 1.2.0-alpha07 中包含这些提交内容。

API 变更

添加了 PowerMetric API,用于测量 Macrobenchmark 中的能耗和功耗。(Ife601、b/220183779) 修复了 MacrobenchmarkScope.dropShaderCache(),以实际丢弃着色器缓存。这会从 StartupMode.COLD 基准中移除大约 20 毫秒的噪声,因为着色器现在每次迭代时都会一直被清除。之前,使用预热迭代的 Partial 编译会误报快速数字,因为在预热期间发生着色器缓存的可能性更大。此修复程序需要已取得 root 权限的设备或者在目标应用中使用 profileinstaller:1.3.0-alpha02。如需了解 ProfileInstaller 库的 API 变更,请参阅 ProfileInstaller 1.30-alpha02 页面。(Ia5171、b/231455742) 添加了 TraceSectionMode("label", Mode.Sum),允许测量在具有相同标签的多个轨迹部分所花的总时间。例如,TraceSectionMetric("inflate", Mode.Sum) 会在 Macrobenchmark 测试的总膨胀时间中报告指标 inflateMs。还移除了 API 29 要求,因为 TraceSectionMetric 可与目标 API 级别较低的 androidx.tracing.Trace 搭配使用,并在目标应用中使用 forceEnableAppTracing。(Id7b68、b/231455742)

bug 修复

通过验证所有输出/错误,提高了所有内部 shell 命令的安全性。(I5984d、b/255402908、b/253094958) 在基准配置文件 adb pull 命令中指定设备,以便能在连接了多个设备(最多一个模拟器)时直接复制拉取命令(I6ac6c、b/223359380) 针对 Macrobenchmark 测试 APK 未设置为自插桩的情形添加了错误消息。此错误消息会阻止在目标应用的进程内进行 Macrobenchmark 测试。在此过程中,宏基准将无法编译/终止/冷启动应用,也无法控制其自身权限 (I4279b) 修复了 measureRepeated() 中 StartupMode.COLD 无法在 setupBlock 后终止目标进程的问题。现在,setupBlock 与应用交互将不会使应用进程保持运行,也不会导致冷启动测量无效。(I8ebb7) 版本 1.2.0-alpha06

2022 年 10 月 24 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha06。版本 1.2.0-alpha06 中包含这些提交内容。

API 变更

在 Android 13 (API 33) 中,BaselineProfileRule 不再需要 root 权限,并且不再处于实验阶段。(Ie0a7d、b/250083467、b/253094958) 这项变更还修复了在未获 root 权限的设备上如何将应用的配置文件刷入磁盘的问题,但需要更新目标应用的 profileinstaller 依赖项。 如需在未取得 root 权限的设备上使用 BaselineProfileRule 或 CompilationMode.Partial(warmupIterations),您还必须将目标应用更新为使用 androidx.profileinstaller.profileinstaller:1.3.0-alpha01。这样可以正确地将配置文件刷入磁盘,以便进行编译/提取。

bug 修复

修复了 API 33 及更高版本上的 SampledProfiling 崩溃问题。(I40743、b/236109374) 版本 1.2.0-alpha05

2022 年 10 月 5 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha05。版本 1.2.0-alpha05 中包含这些提交内容。

bug 修复

修复了 Studio 系统轨迹查看器中针对基准捕获的轨迹的帧细分(I3f3ae、b/239677443) 更正了 FrameTimingMetric,将 FrameOverrun 列为需要 API 31 而不是 29(I716dd、b/220702554) 在 BaselineProfileRule 中设置了迭代,并在未安装目标软件包时明确抛出(已针对 MacrobenchmarkRule 完成这一设置)。(Ic09a3、b/227991471) 版本 1.2.0-alpha04

2022 年 9 月 21 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha04。版本 1.2.0-alpha04 中包含这些提交内容。

新功能

在 Macrobenchmark 中添加了对 dryRunMode.enable 插桩参数的支持(已在 Microbenchmark 中提供),以加快本地开发和验证应用自动化(例如在提交前测试中)。这会将迭代计数替换为 1,跳过编译,抑制所有配置错误,并停用 .json 文件输出衡量。(Ib51b4、b/175149857)

在 Gradle 命令行中:

./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true

在 build.gradle 中:

android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }

bug 修复

修复了 StartupTimingMetric,使其不再需要通过 MacrobenchmarkScope.startActivityAndWait() 启动测量的 activity。这意味着,该指标可以从通知、Context.startActivity()、基于应用内 activity 的导航或 shell 命令等中选取启动模式。(Ia2de6、b/245414235) 通过降低帧检测的严格程度修复了以下 bug:尝试等待在模拟器上完成启动时,startActivityAndWait 会发生超时。(Ibe2c6、b/244594339、b/228946895) 版本 1.2.0-alpha03

2022 年 9 月 7 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha03。版本 1.2.0-alpha03 中包含这些提交内容。

新功能

添加了用于将 BenchmarkState 与 BenchmarkRule / JUnit4 分开使用的实验性 API。(Id478f、b/228489614)

bug 修复

为 startActivityAndWait 添加了 Leanback 回退。(01ed77、b/242899915) 版本 1.2.0-alpha02

2022 年 8 月 24 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha02。版本 1.2.0-alpha02 中包含这些提交内容。

API 变更

MacrobenchmarkScope.killProcess() 默认为 am force stop,即使已取得 root 权限也不例外,但生成基准配置文件期间除外。可使用可选的布尔值参数将其替换。(02cce9、b/241214097)

bug 修复

支持为系统应用生成基准配置文件。(I900b8、b/241214097) 支持在未取得 root 权限的设备上检查 ODPM 功耗指标。(a38c78、b/229623230) 版本 1.2.0-alpha01

2022 年 7 月 27 日

发布了 androidx.benchmark:benchmark-*:1.2.0-alpha01。版本 1.2.0-alpha01 中包含这些提交内容。

新功能

新增了 tracing-perfetto-common 组件,让工具可在会显示 Perfetto SDK 跟踪记录的应用中启用 Perfetto SDK 跟踪功能 (I2cc7f)

添加了 androidx.benchmark.enabledRules 插桩参数,以允许过滤仅针对基准运行 MacroBenchmark 的情况,或过滤仅针对生成基准配置文件运行 MacroBenchmark 的情况。传入“Macrobenchmark”或“BaselineProfile”即可仅运行一种类型的测试,例如在模拟器上生成 BaselineProfiles 时。您也可以使用逗号分隔列表。(I756b7、b/230371561)

例如,在 Macrobenchmark 的 build.gradle 中:

android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }

或者在 Gradle 命令行中:

./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile

API 变更

添加了新的 PowerMetric,用于测量基准测试中的能耗和功耗任务。(I9f39b、b/220183779) 添加了新的编译模式 CompilationMode.Ignore,用于跳过配置文件重置和编译。(Ibbcf8、b/230453509) 向 BaselineProfileRule#collectBaselineProfile 添加了一个新参数,以按软件包名称过滤输出文件(If7338、b/220146561) 让开发者能够对设备进行放电以测量功耗。(I6a6cb) 在 MacrobenchmarkScope 中添加了清除着色器缓存的功能。(I32122) 让开发者能够配置指标类型的显示并详细显示预期的子系统类别。(I810c9) 以前,只要在不受支持的设备上运行,基准中就会抛出 UnsupportedOperationException。现在,仅当该指标用于不受支持的设备上时(即:PowerMetric.configure),才会出现不支持的操作异常 (UOE) 情况。(I5cf20、b/227229375) 添加了 TotalPowerMetric 和 TotalEnergyMetric,用于在 Macrobenchmark 中测量每个系统类别的总功耗和能耗。(I3b26b、b/224557371)

bug 修复

修复了以下问题:在未取得 root 权限的 build 上的各 Macrobenchmark 之间,系统未正确重置已编译的方法。遗憾的是,每次迭代都需要重新安装该 APK,这会清除每个 Mmacrobenchmark 的应用数据。(I31c74、b/230665435) 修复了 API 21/22 上的跟踪记录崩溃问题(If7fd6、b/227509388、b/227510293、b/227512788) 改进了 activity 启动完成检测,以修复启动 Macrobenchmark 期间的“无法读取任何指标”异常。(Ia517c) 版本 1.1.1 版本 1.1.1

2022 年 11 月 9 日

发布了 androidx.benchmark:benchmark-*:1.1.1。版本 1.1.1 中包含这些提交内容。

bug 修复

修复了在某些 Android11 (API 30) 及更高版本的设备上发生的 android.system.ErrnoException: open failed: EACCES 问题。这是从 1.2.0-alpha01 中择优挑选的修复程序。(aosp/2072249) 版本 1.1.0 版本 1.1.0

2022 年 6 月 15 日

发布了 androidx.benchmark:benchmark-*:1.1.0。版本 1.1.0 中包含这些提交内容。

此版本与 androidx.benchmark:benchmark-*:1.1.0-rc03 完全相同。

自 1.0.0 以来的重要变更

支持 Jetpack Macrobenchmark,让您能够衡量整个应用的交互情况(例如启动和滚动),并能够捕获轨迹和衡量轨迹部分。

支持基准配置文件

CompilationMode.Partial,用于衡量基准配置文件的效果。 @BaselineProfileRule,用于为特定关键用户历程自动生成基准配置文件。

在 Microbenchmark 运行期间,支持分配指标和性能剖析。

版本 1.1.0-rc03

2022 年 6 月 1 日

发布了 androidx.benchmark:benchmark-*:1.1.0-rc03。版本 1.1.0-rc03 中包含这些提交内容。

bug 修复

避免在每次基准测试迭代中重新安装目标软件包。(aosp/2093027、b/231976084)

从 pressHome() 中移除了 300ms 延迟。(aosp/2086030、b/231322975)

通过优化后台使用的 Shell 命令,加快了 Macrobenchmark 迭代速度。(aosp/2086023、b/231323582)

使用 Macrobenchmark 生成基准配置文件时,支持受管理的 Gradle 设备。(aosp/2062228、b/228926421)

版本 1.1.0-rc02

2022 年 5 月 11 日

发布了 androidx.benchmark:benchmark-*:1.1.0-rc02。版本 1.1.0-rc02 中包含这些提交内容。

请注意,此版本包含一项行为变更,应用现在会在每次基准测试之间完全重新安装,以确保测量结果准确。

bug 修复/行为变更

修复了以下问题:应用编译在 Macrobenchmark 测试之间未正确重置,而且在未取得 root 权限的 build 中,应用编译完全无法重置。这修复了运行多项测试经常会导致 CompilationMode 对测量结果几乎没有影响的问题。为了解决此问题,目标应用现在会完全重新安装每个测试方法,这将清除每次 Macrobenchmark 测试之间的应用数据。(I31c74、b/230665435)

由于这会防止应用在测试前设置状态,因此现在可以跳过编译/重新安装来解决此问题。例如,您可以使用 shell 命令 cmd package compile -f -m speed 完全编译目标,然后绕过 Macrobenchmark 的编译步骤。

例如,在 Macrobenchmark 的 build.gradle 中:

android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }

或者在 Gradle 命令行中:

./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false

添加 androidx.benchmark.enabledRules 插桩参数以支持在 Macrobenchmark 与生成测试的基准配置文件之间共享模块。传入“Macrobenchmark”或“BaselineProfile”即可仅运行一种类型的测试,例如在模拟器上生成 BaselineProfiles 时。(I756b7、b/230371561)

例如,在 Macrobenchmark 的 build.gradle 中:

android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }

或者在 Gradle 命令行中:

./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile 版本 1.1.0-rc01

2022 年 4 月 20 日

发布了 androidx.benchmark:benchmark-*:1.1.0-rc01。版本 1.1.0-rc01 中包含这些提交内容。

bug 修复

Android Studio 中的基准配置文件输出链接现在使用唯一的文件名。这样,输出始终会反映使用 BaselineProfileRule 的最新结果。(aosp/2057008、b/228203086) 版本 1.1.0-beta06

2022 年 4 月 6 日

发布了 androidx.benchmark:benchmark-*:1.1.0-beta06。版本 1.1.0-beta06 中包含这些提交内容。

bug 修复

修复了 API 21/22 上的跟踪记录崩溃问题(If7fd6、b/227509388) 改进了 activity 启动完成检测,以修复启动 Macrobenchmark 期间的“无法读取任何指标”异常。(Ia517c) 修复了使用 CompilationMode.None() 时 Macrobenchmark 的启动指标。在此变更生效之前,CompilationMode.Partial() 的运行速度似乎慢于 Compilation.None()。(611ac9) 版本 1.1.0-beta05

2022 年 3 月 23 日

发布了 androidx.benchmark:benchmark-*:1.1.0-beta05。版本 1.1.0-beta05 中包含这些提交内容。

bug 修复

使用 CompilationMode.None 时,在跳过配置文件安装后终止软件包。(aosp/1991373) 修复了使用 StartupMode.COLD 时 Macrobenchmark 无法收集启动指标的问题。(aosp/2012227 b/218668335) 版本 1.1.0-beta04

2022 年 2 月 23 日

发布了 androidx.benchmark:benchmark-*:1.1.0-beta04。版本 1.1.0-beta04 中包含这些提交内容。

bug 修复

修复了在 Android 10 中缺少指标的问题,还修复了因系统在轨迹中未正确捕获进程名称而导致出现的 NoSuchElementException。(Ib4c17、b/218668335)

在 Android Q (API 29) 及更高版本中使用 PowerManager 进行温控调频检测。这可显著降低温控调频检测发生误报的频率(在 90 秒冷却期之后重试基准测试),并显著提高在用户 build 上进行基准测试的速度。同时这也使得即使时钟处于锁定状态,系统仍可进行热限制检测(如果锁定值对于设备的物理环境而言过高)。(I9c027、b/217497678、b/131755853)

过滤对 measureRepeated 线程的 Simpleperf 采样性能剖析,目的就在于简化检查(Ic3e12、b/217501939)

支持来自多进程应用中已命名界面子进程的指标(Ice6c0、b/215988434)

过滤基准配置文件规则,以 Android 9 (SDK 28) 为目标平台。aosp/1980331 b/216508418

使用 Compilation.None() 时跳过配置文件安装。此外,在应用使用较低版本的 androidx.profileinstaller 和 Android Gradle 插件时还会报告警告。aosp/1977029

版本 1.1.0-beta03

2022 年 2 月 9 日

发布了 androidx.benchmark:benchmark-*:1.1.0-beta03。版本 1.1.0-beta03 中包含这些提交内容。

API 变更

在 macrobenchmark 库中的实验性标记下方添加了 AudioUnderrunMetric,以允许检测音频欠载(Ib5972)

BaselineProfileRule 不再接受 setup 块,因为其作用与 profileBlock 相同。(Ic7dfe、b/215536447)

例如:

@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) } @Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }

bug 修复

修复了以下问题:在 Studio 输出中建立关联后,微平台性能分析器记录的轨迹在后续运行中无法更新(I5ae4d、b/214917025) 在 API 23 上阻止编译 shell 命令 (Ice380) 将 FrameCpuTime 重命名为 FrameDurationCpu,并将 FrameUiTime 重命名为 FrameDurationUi,以指明它们是时长(而非时间戳)并使前缀保持一致。(I0eba3、b/216337830) 版本 1.1.0-beta02

2022 年 1 月 26 日

发布了 androidx.benchmark:benchmark-*:1.1.0-beta02。版本 1.1.0-beta02 中包含这些提交内容。

bug 修复

与其他性能剖析输出类似,微基准堆栈采样/方法跟踪性能分析结果现在会在 Studio 输出中添加链接,并且不会抑制分配指标。(Idcb65、b/214440748、b/214253245) BaselineProfileRule 现在会在 logcat 和 Studio 输出中输出 adb pull 命令的结果,以拉取生成的 BaselineProfile 文本文件。(f08811) 版本 1.1.0-beta01

2022 年 1 月 12 日

发布了 androidx.benchmark:benchmark-*:1.1.0-beta01。版本 1.1.0-beta01 中包含这些提交内容。

bug 修复

修复了性能分析器参数启用设置被忽略的问题。(I37373、b/210619998) 移除了已废弃的 CompliationModes(I98186、b/213467659) 为清楚起见,将 CompilationMode.Partial 的基准配置文件参数改成了枚举类型。(Id67ea) 版本 1.1.0-alpha13

2021 年 12 月 15 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha13。版本 1.1.0-alpha13 中包含这些提交内容。

API 变更

向 Android Q(API 29 及更高级别)上的微平台输出添加了低开销系统跟踪。请注意,这目前不会(通过 android.os.Trace 或 androidx.tracing Jetpack API)捕获自定义跟踪,以避免对结果产生影响。此跟踪在诊断不稳定性方面非常有用,尤其是针对基准之外的来源。(I298be、b/205636583、b/145598917) 将 CompilationModes 分为三个类:完整、无、部分。之前它们以编译参数(现在我们视作实现细节)和功能命名,导致名称不一致。这样一来,不同平台版本上的权衡、潜在组合和行为就变得更加清晰明确。(I3d7bf、b/207132597) 现在,“设置”和“衡量”始终是成对的,并且按顺序显示。您现在可以查询软件包名称和迭代(尽管在特定的预热场景中迭代可能是 null)。(Id3b68、b/208357448、b/208369635)

bug 修复

修复了 CompilationMode.Speed 被误处理为 None 的问题 (I01137) 版本 1.1.0-alpha12

2021 年 11 月 17 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha12。版本 1.1.0-alpha12 中包含这些提交内容。

新功能

针对基于轨迹的自定义时间测量增加了实验性 TraceSectionMetric。(I99db1、b/204572664)

bug 修复

每次迭代时唤醒设备,以确保可以测试界面 - 需要停用锁屏功能。(Ibfa28、b/180963442) 修复了模拟器和未取得 root 权限的设备在 StackSampling 分析模式下多次崩溃的问题(Icdbda、b/202719335) 取消了每次迭代结束时 0.5 秒的休眠时间 - 如果您发现此次更改后缺少一些指标,请提交 bug。(Iff6aa) 降低了数据丢失的几率,并减少了跟踪记录的内存开销(Id2544、b/199324831、b/204448861) 改为内存占用较小的 sched 存储格式,将轨迹大小缩减了约 40%。(Id5fb6、b/199324831) 将启动指标的实现更新为始终在 renderthread 结束时结束。这将使各个平台版本间的测量结果更为一致,并且更贴近应用内衡量结果。(Ic6b55) 版本 1.1.0-alpha11

2021 年 11 月 3 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha11。版本 1.1.0-alpha11 中包含这些提交内容。

API 变更

Macrobenchmark 现在的 minSdkVersion 为 23。(If2655) 新增了一个实验性 BaselineProfileRule,能够为应用的关键用户历程生成基准配置文件。后面提供了详细文档。(Ibbefa、b/203692160) 移除了为 Java 调用方添加的 measureRepeated 接口变体,因为它会导致在完成/解析该方法是产生歧义。Java 调用方将需要再从 measureRepeated 返回 Unit.Instance。如果由此给您带来不便,请提交 bug,我们会在未来版本中细探这一问题。(Ifb23e、b/204331495) 版本 1.1.0-alpha10

2021 年 10 月 27 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha10。版本 1.1.0-alpha10 中包含这些提交内容。

API 变更

向后移植 StartupTimingMetric 以向后兼容 API 23。这一新实现还能更好地处理 reportFullyDrawn(),以等待相应内容的呈现。(If3ac9、b/183129298) 为 Java 调用方的多个 MacrobenchmarkScope 方法添加了 JvmOverloads。(I644fe、b/184546459) 提供了备用 MacrobenchmarkRule.measureRepeated 函数,该函数使用 Consumer 实现 Java 语言中的惯用用法。(If74ab、b/184546459)

bug 修复

修复了跟踪记录未尽早开始以及缺少指标数据的问题。这应该可以修复由库本身引起的“在基准运行期间无法读取任何指标”异常。(I6dfcb、b/193827052、b/200302931) FrameNegativeSlack 已重命名为 FrameOverrun 以阐明其的含义:帧超出其时间预算的程度。(I6c2aa、b/203008701) 版本 1.1.0-alpha09

2021 年 10 月 13 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha09。版本 1.1.0-alpha09 中包含这些提交内容。

bug 修复

支持在没有对 API 31/S+ 的 root 权限的情况下清空内核页缓存,提高了 StartupMode.COLD 启动模式的准确性。(Iecfdb、b/200160030) 版本 1.1.0-alpha08

2021 年 9 月 29 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha08。版本 1.1.0-alpha08 中包含这些提交内容。

API 变更

使滚动 macrobenchmark 可以往回运行到 API 23(If39c2、b/183129298) 向界面和 JSON 输出添加了新型采样指标,侧重于每次迭代多个样本的百分位数。(I56247、b/199940612) 整个基准库都改为使用浮点指标(在 Studio 界面中会被截断)。(I69249、b/197008210) 版本 1.1.0-alpha07

2021 年 9 月 1 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha07。版本 1.1.0-alpha07 中包含这些提交内容。

API 变更

将最低的 API 级别提升到了 21,以反映未来预期支持的最低 API 级别。当前支持的最低 API 级别仍通过 requiredApi() 传达,目前为 29(I440d6、b/183129298)

bug 修复

修复了 ProfileInstaller,以更方便使用基准配置文件的应用使用 CompilationMode.BaselineProfile 运行 MacroBenchmark。(I42657、b/196074999)注意:还需要更新到 androidx.profileinstaller:profileinstaller:1.1.0-alpha04 或更高版本。 StartupMode.COLD + CompilationMode.None 基准现在更加稳定。(I770cd、b/196074999) 版本 1.1.0-alpha06

2021 年 8 月 18 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha06。版本 1.1.0-alpha06 中包含这些提交内容。

API 变更

添加了 androidx.benchmark.iterations 插桩参数,以允许在本地进行测试/性能分析时手动替换迭代计数。(6188be、b/194137879)

bug 修复

已在 API 29 及更高级别上切换到 Simpleperf 并将其作为默认采样性能分析器。(Ic4b34、b/158303822)

已知问题

CompilationMode.BaselineProfile 仍在开发中。目前,请避免使用它来确定配置文件的优良度。 版本 1.1.0-alpha05

2021 年 8 月 4 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha05。版本 1.1.0-alpha05 中包含这些提交内容。

由于间歇性崩溃问题,1.1.0-alpha04 已取消,未发布。b/193827052

API 变更

将 startActivityAndWait 切换为通过 am start 调用启动事件,这会使每次测量迭代的时间缩短约 5 秒,但代价是不再支持 intent parcelable。(I5a6f5、b/192009149)

bug 修复

降低了热节流检测的激进性,并在频繁检测到节流时重新计算基准。(I7327b) 修复了 FrameTimingMetric,以支持 Android S Beta 版(Ib60cc、b/193260119) 使用 EmptyActivity 使目标应用退出强行停止状态,以便更好地支持 CompilationMode.BaselineProfile。(Id7cac、b/192084204) 将轨迹文件扩展名更改为 .perfetto-trace,以符合平台标准。(I4c236、b/174663039) StartupTimingMetric 现在会输出“fullDrawnMs”指标,以测量直到应用完成渲染所用的时间。如需为您的应用定义此指标,请在初始内容准备就绪时(例如,从数据库或网络加载初始列表项时)调用 Activity.reportFullyDrawn。(无需对 ComponentActivity 进行 build 版本检查即可使用 reportFullyDrawn 方法。)请注意,您的测试必须运行足够长的时间才能捕获此指标(startActivityAndWait 不会等待 reportFullyDrawn)。(If1141、b/179176560) 将界面元数据附加到轨迹的时间缩短了 50 多毫秒(Ic8390、b/193923003) 停止跟踪后轮询频率显著提高,这可将示例启动基准运行时间缩短 30% 以上(Idfbc1、b/193723768) 版本 1.1.0-alpha03

2021 年 6 月 16 日

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha03。版本 1.1.0-alpha03 中包含这些提交内容。

新功能

添加了新的 CompilationMode.BaselineProfile 来支持使用 Jetpack ProfileInstaller 库安装的配置文件。(aosp/1720930)

bug 修复

用于抑制基准错误的 Gradle 示例代码已更新为使用一个非废弃的 API,其语法也支持 .gradle.kts 用户。

例如:

testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY" 版本 1.1.0-alpha02

2021 年 5 月 18 日

Benchmark 版本 1.1.0-alpha02 为基准化分析引入了一个重要组件 - Macrobenchmark。除了提供用于衡量 CPU 循环的基准之外,Macrobenchmark 还可用于衡量整个应用的互动(如启动和滚动)和捕获跟踪记录。如需了解详情,请参阅库文档。

发布了 androidx.benchmark:benchmark-*:1.1.0-alpha02。版本 1.1.0-alpha02 中包含这些提交内容。

新功能

添加了 Macrobenchmark 工件(androidx.benchmark:benchmark-macro-junit4 和 androidx.benchmark:benchmark-macro)

从应用(在本地或 CI 中)中捕获启动、滚动/动画性能指标 从 Android Studio 中捕获和检查跟踪记录

bug 修复

解决了 Android 12 上输出目录的 shell 权限问题(注意 - 可能需要将 Android Gradle 插件更新到 7.0.0 Canary 版以及将 Android Studio 更新为 Arctic Fox [2020.3.1],以继续在受影响的设备上捕获输出文件)。(Icb039) 在 BenchmarkPlugin 中支持配置缓存(6be1c1、b/159804788) 简化了文件输出 - 默认情况下,在不需要 requestLegacyExternalStorage=true 的目录中启用(8b5a4d、b/172376362) 修复了以下问题:库输出关于在没有 JIT 线程的平台版本上找不到 JIT 线程的 logcat 警告。(I9cc63、b/161847393) 修复了读取设备最大频率的问题。(I55c7a) 版本 1.1.0-alpha01

2020 年 6 月 10 日

发布了 androidx.benchmark:benchmark-common:1.1.0-alpha01、androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 和 androidx.benchmark:benchmark-junit4:1.1.0-alpha01。版本 1.1.0-alpha01 中包含这些提交内容。

1.1 的新功能

分配指标 - 基准现在会在预热和计时后运行一个额外的阶段,以捕获分配计数。分配可能会导致旧版平台出现性能问题(O 中的 140ns 变为 M 中的 8ns - 在 Nexus5X 上测量,时钟处于锁定状态)。该指标显示以下位置:在 Android Studio 控制台输出以及 性能剖析支持 - 您现在可以捕获基准运行的性能剖析数据,以检查代码运行缓慢的原因。Benchmark 支持捕获方法跟踪记录或 ART 中的方法采样。您可以使用 Android Studio 中的性能剖析器(依次选择“File > Open”)来检查这些文件。 Benchmark Gradle 插件现在提供默认设置,以便简化设置过程: testBuildType 默认设置为发布,以避免使用内置代码覆盖率的依赖项。发布 buildType 也会配置为默认 buildType,以便 Android Studio 能够在首次打开项目时自动选择正确的 build 变体。(b/138808399) signingConfig.debug 用作默认的签名配置 (b/153583269)

** 问题修复 **

显著降低了预热过渡开销,其中每个基准的首次测量值都因人为原因而高于其他测量值。该问题在非常小的基准(1 毫秒或更短)中更加明显。(b/142058671) 修复了从命令行运行时针对每个基准输出的 InstrumentationResultParser 错误。(I64988、b/154248456)

已知问题

命令行、Benchmark 的 Gradle 调用不直接输出结果。若要解决该问题,您可以查看 Studio,也可以解析 JSON 输出文件以获取结果。 Benchmark 报告无法从已安装应用 ID 以“android”或“download”(不区分大小写)结尾的应用的设备中拉取报告。遇到该问题的用户应将 Android Gradle 插件升级到 4.2-alpha01 或更高版本。 版本 1.0.0 Benchmark 版本 1.0.0

2019 年 11 月 20 日

发布了 androidx.benchmark:benchmark-common:1.0.0、androidx.benchmark:benchmark-gradle-plugin:1.0.0 和 androidx.benchmark:benchmark-junit4:1.0.0,这些版本与 1.0.0-rc01 相比没有变化。版本 1.0.0 中包含这些提交内容。

1.0.0 的主要功能

使用 Benchmark 库,您可为应用代码编写性能基准测试并快速获得分析结果。

它可以防止出现构建和运行时配置问题并稳定设备性能,确保衡量值的准确性和一致性。直接在 Android Studio 中或在持续集成中运行基准化分析,以观察代码性能随时间的变化情况,并防止出现回归。

主要功能包括:

时钟稳定 自动设置线程优先级 支持界面性能测试,例如在 RecyclerView 示例中 JIT 感知预热和循环 用于后期处理的 JSON 基准输出 版本 1.0.0-rc01

2019 年 10 月 23 日

发布了 androidx.benchmark:benchmark-common:1.0.0-rc01、androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 和 androidx.benchmark:benchmark-junit4:1.0.0-rc01。版本 1.0.0-rc01 中包含这些提交内容。

新功能

向基准添加了 systrace 跟踪记录

bug 修复

修复了由于优先级设置导致 JIT 无法在预热前结束的指标不稳定问题 (b/140773023) 统一了 Android Gradle 插件 3.5 和 3.6 的 JSON 输出目录 版本 1.0.0-beta01

2019 年 10 月 9 日

发布了 androidx.benchmark:benchmark-common:1.0.0-beta01、androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 和 androidx.benchmark:benchmark-junit4:1.0.0-beta01。版本 1.0.0-beta01 中包含这些提交内容。

新功能

在每次预热之前运行垃圾回收,以减少从一个基准泄漏到下一个基准的内存压力 (b/140895105)

bug 修复

添加了 androidx.annotation:android-experimental-lint 依赖项,以便在未使用实验性 API 时,Java 代码将正确生成 lint 错误,类似于 Kotlin 实验性注解针对 Kotlin 调用方提供的内容。 现在可正确检测 Android Gradle 插件 3.6 中输出的 additionalTestOutputDir 插桩参数的使用情况,了解 AGP 何时处理数据副本。 修复了 JSON 中未检测到的时钟频率,以正确打印 -1 (b/141945670)。 版本 1.0.0-alpha06

2019 年 9 月 18 日

发布了 androidx.benchmark:benchmark-common:1.0.0-alpha06、androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 和 androidx.benchmark:benchmark-junit4:1.0.0-alpha06。版本 1.0.0-alpha06 中包含这些提交内容。

新功能

添加了检查以确定错误使用旧软件包的测试运行程序,该程序现在提供更有用的错误消息

API 变更

实验性注解 ExperimentalAnnotationReport 现已正确公开。现在,使用实验性 BenchmarkState#report API 时需要此注释 版本 1.0.0-alpha05

2019 年 9 月 5 日

发布了 androidx.benchmark:benchmark-common:1.0.0-alpha05、androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 和 androidx.benchmark:benchmark-junit4:1.0.0-alpha05。点击此处可查看此版本中包含的提交内容。

API 变更

BenchmarkState.reportData API 现标记为实验性

bug 修复

修复了时钟锁定脚本,该脚本在缺少 cut 或 expr shell 实用程序的设备上将失败。 修复了 ./gradlew lockClocks 任务存在的以下问题:在以 su 实用程序的较旧版本(不支持 -c 标志)启用 root 权限的设备上,该任务会挂起。 版本 1.0.0-alpha04

2019 年 8 月 7 日

发布了 androidx.benchmark:benchmark-common:1.0.0-alpha04、androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 和 androidx.benchmark:benchmark-junit4:1.0.0-alpha04。点击此处可查看此版本中包含的提交内容。

此外还添加了有关如何在不使用 Gradle 的情况下使用 Benchmark 库的新文档,两者可用于不同的构建系统(例如 Bazel 或 Buck),以及在 CI 中运行时。如需了解详情,请参阅在不使用 Gradle 的情况下构建基准和在持续集成环境中运行基准测试。

新功能

Gradle 插件现在自动停用测试覆盖范围,并默认设置 AndroidBenchmarkRunner (b/138374050) 增加了在运行基准和使用 AGP 3.6+ 时,对基于 AGP 的新数据副本的支持 添加了 JSON 格式输出总基准测试运行时间 (b/133147694) 现在,使用名称字符串(例如 @Parameters(name = "size={0},depth={1}"))的 @Parameterized 基准以 JSON 输出格式输出每个基准的参数名称和值 (b/132578772) 模拟运行模式 (b/138785848)添加了“模拟运行”模式,仅运行每个基准循环一次以检查是否有错误/崩溃,而不捕获测量值。该模式非常有用,例如可在预提交中快速运行基准,以确认它们未损坏。

API 变更

更改了模块结构,拆分了库 (b/138451391)benchmark:benchmark-junit4 包含具有 JUnit 依赖项的类:AndroidBenchmarkRunner 和BenchmarkRule。这两个类均已移入 androidx.benchmark.junit4 软件包中 benchmark:benchmark-common 包含其余逻辑,其中包括 BenchmarkState API 通过这种拆分,该库将来可以在没有 JUnit4 API 的情况下支持基准化分析 配置警告现在被视为错误,并且会使测试崩溃 (b/137653596) 这样做是为了进一步鼓励准确测量,尤其是在 CI 中 可以使用插桩参数将这些错误回退为警告。例如:-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

bug 修复

写入 Q 设备上的外部存储空间时出现的错误会提供更具描述性的消息,并提供有关如何解决相应问题的建议 在基准运行期间,屏幕会自动打开,而不是在屏幕关闭时失败

外部贡献

感谢 Sergey Zakharov 为 JSON 输出改进以及修复屏幕关闭问题做出的贡献! 版本 1.0.0-alpha03

2019 年 7 月 2 日

发布了 androidx.benchmark:benchmark:1.0.0-alpha03 和 androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03。点击此处可查看此版本中包含的提交内容。

新功能

在完整的 JSON 报告中公开每个基准因热节流而导致的休眠持续时间

bug 修复

在 Android 插件和 Android 块之后,不再需要应用 Gradle 插件 在使用分区存储的 Android 10 设备上添加了对基准报告的支持 版本 1.0.0-alpha02

2019 年 6 月 6 日

发布了 androidx.benchmark:1.0.0-alpha02 和 androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02。点击此处可查看此版本中包含的提交内容。

请注意,我们将 JSON 架构视为 API。我们计划遵循与其他 API 相同的稳定性约束:进入 Beta 版后架构即变得稳定(极偶尔会有例外情况),并在最终版本中进行修复,在次要版本中仅添加新内容,而在主要版本中更改/移除内容。

API 变更

翻新了 JSON 架构。对 JSON 架构的后续更改很可能仅限于新增特性:

重新组织了结果对象结构,以支持将来的更多指标组 (b/132713021) 在顶级对象中添加了测试运行上下文信息(例如,设备和 build 信息以及时钟是否处于锁定状态)(b/132711920) 现在,时间指标名称中带有“ns”(b/132714527) 扩充了每个报告指标的统计信息(最大值、中位数、最小值),并移除了简化的“nanos”摘要统计信息 (b/132713851)

移除了 XML 输出 (b/132714414)

从 BenchmarkState.reportData API 中移除了热限制检测 (b/132887006)

bug 修复

修复了 ./gradlew lockClocks 在某些最新的 OS 设备上不粘滞的问题 (b/133424037) 停用了模拟器的限制检测 (b/132880807) 版本 1.0.0-alpha01

2019 年 5 月 7 日

发布了 androidx.benchmark:benchmark:1.0.0-alpha01。点击此处可查看此版本中包含的提交内容。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3